package Colecciones;

import Modelo.EjecutaConsulta;
import Modelo.Fila;
import java.io.PrintStream;
import java.util.Calendar;
import java.util.Vector;

public class Persona
{
    public static final String E_ADDR_TYPE_HOME = "HOME";
    public static final String PHONE_TYPE_BUSN = "BUSN";
    public static final String PHONE_TYPE_HOME = "HOME";
    public static final String PHONE_TYPE_CELL = "CELL";
    public static final String ADDRESS_TYPE_HOME = "HOME";
    
  public static Vector consultarDatosBasicos(Fila fConsulta)
  {
    Vector vResultado = new Vector();
    try
    {
      String strSql = "SELECT a.EMPLID, b.NATIONAL_ID_TYPE TIPO_DOCUMENTO, b.NATIONAL_ID NUMERO_DOCUMENTO, a.FIRST_NAME NOMBRES, a.LAST_NAME APELLIDOS, c.EMAIL_ADDR CORREO, j.CITY CIUDAD_RESIDENCIA, j.ADDRESS1 DIRECCION_RESIDENCIA, k.PHONE TELEFONO_RESIDENCIA, e.DESCR CARGO, f.DESCR EMPRESA, h.CITY CIUDAD_EMPRESA, h.ADDRESS1 DIRECCION_EMPRESA, d.PHONE TELEFONO_EMPRESA";

      String strTablas = " FROM";

      String strCondicion = "";
      String strJoin = "";

      String strValor = Utils.getValor(fConsulta, "ESTADO_CIVIL_PEOPLE");
      Vector vLista = new Vector();
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strCondicion = strCondicion + " WHERE (a.MAR_STATUS = '" + vLista.get(0) + "'";
          for (int i = 1; i < vLista.size(); ++i)
          {
            strCondicion = strCondicion + " OR a.MAR_STATUS = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
      }

      strValor = Utils.getValor(fConsulta, "GENERO_PEOPLE");
      vLista = new Vector();
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if (!(strCondicion.contains("WHERE")))
            strCondicion = strCondicion + " WHERE";
          else
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (a.SEX = '" + vLista.get(0) + "'";
          for (int i = 1; i < vLista.size(); ++i)
          {
            strCondicion = strCondicion + " OR a.SEX = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
      }

      strValor = Utils.getValor(fConsulta, "EDAD");
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          Calendar calendario = Calendar.getInstance();

          int iDiaM = calendario.get(5);

          int iMes = calendario.get(2);

          int iAnno = calendario.get(1);

          int iAnnoInicial = iAnno - Integer.parseInt(vLista.get(0).toString());
          String strFechaInicial = iDiaM + "/" + (iMes + 1) + "/" + iAnnoInicial;

          int iAnnoFinal = iAnnoInicial - 5;
          String strFechaFinal = iDiaM + "/" + (iMes + 1) + "/" + iAnnoFinal;

          if (!(strCondicion.contains("WHERE")))
            strCondicion = strCondicion + " WHERE";
          else
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (a.BIRTHDATE BETWEEN '" + strFechaFinal + "'" + " AND '" + strFechaInicial + "'";

          for (int i = 1; i < vLista.size(); ++i)
          {
            iAnnoInicial = iAnno - Integer.parseInt(vLista.get(i).toString());
            strFechaInicial = iDiaM + "/" + (iMes + 1) + "/" + iAnnoInicial;

            iAnnoFinal = iAnnoInicial - 5;
            strFechaFinal = iDiaM + "/" + (iMes + 1) + "/" + iAnnoFinal;

            strCondicion = strCondicion + " OR a.BIRTHDATE BETWEEN '" + strFechaFinal + "'" + " AND '" + strFechaInicial + "'";
          }

          strCondicion = strCondicion + ")\n";
        }
      }

      strValor = Utils.getValor(fConsulta, "CIUDAD_RESIDENCIA_PEOPLE");
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if (!(strCondicion.contains("WHERE")))
            strCondicion = strCondicion + " WHERE";
          else
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (LOWER(TRANSLATE(j.CITY, 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU')) LIKE LOWER(TRANSLATE('%" + vLista.get(0) + "%', 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU'))";
          for (int i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR LOWER(TRANSLATE(j.CITY, 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU')) LIKE LOWER(TRANSLATE('%" + vLista.get(i) + "%', 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU'))";
          }
          strCondicion = strCondicion + ")\n";
        }
      }

      strValor = Utils.getValor(fConsulta, "CARGO_PEOPLE");
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if (!(strCondicion.contains("WHERE")))
            strCondicion = strCondicion + " WHERE";
          else
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (d.US_SOC_CD = '" + vLista.get(0) + "'";
          for (int i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR d.US_SOC_CD = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ") AND d.EMPLID = a.EMPLID";
        }
      }

      strJoin = strJoin + " LEFT JOIN PS_PERS_NID b ON b.EMPLID = a.EMPLID AND UPPER(b.PRIMARY_NID) ='Y' LEFT JOIN PS_EMAIL_ADDRESSES c ON c.EMPLID = a.EMPLID AND UPPER(c.PREF_EMAIL_FLAG) = 'Y' LEFT JOIN PS_SCC_PRIORWORK d ON d.emplid = a.emplid LEFT JOIN PS_US_SOC_TBL e ON e.US_SOC_CD = d.US_SOC_CD AND UPPER(e.EFF_STATUS) = 'A' LEFT JOIN PS_EXT_ORG_TBL f ON f.EXT_ORG_ID = d.EXT_ORG_ID LEFT JOIN PS_ORG_LOCATION h ON h.EXT_ORG_ID = f.EXT_ORG_ID LEFT JOIN PS_ADDRESSES j ON j.EMPLID = a.EMPLID AND UPPER(j.EFF_STATUS) = 'A' AND LOWER(j.ADDRESS_TYPE) = 'home' LEFT JOIN PS_PERSONAL_PHONE k ON k.EMPLID = a.EMPLID AND UPPER(k.PREF_PHONE_FLAG) = 'Y'";

      strTablas = strTablas + " PS_PERSONAL_DATA a";

      strCondicion = strCondicion + " GROUP BY a.EMPLID, b.NATIONAL_ID_TYPE, b.NATIONAL_ID, a.FIRST_NAME, a.LAST_NAME, c.EMAIL_ADDR, j.CITY, j.ADDRESS1, k.PHONE, e.DESCR, f.DESCR, h.CITY, h.ADDRESS1, d.PHONE ORDER BY a.FIRST_NAME, a.LAST_NAME ASC, d.PHONE DESC";

      strSql = strSql + strTablas + strJoin + strCondicion;

      //System.out.println("consulta: " + strSql);
      vResultado = EjecutaConsulta.Ejecutar(strSql);
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.consultarDatosBasicos(Fila fConsulta) " + e.toString());
    }

    return vResultado;
  }

  public static Vector consultarEgresados(Fila fConsulta)
  {
    Vector vResultado = new Vector();
    try
    {
      int i;
      String strSql = "SELECT a.EMPLID, b.NATIONAL_ID_TYPE TIPO_DOCUMENTO, b.NATIONAL_ID NUMERO_DOCUMENTO, a.FIRST_NAME NOMBRES, a.LAST_NAME APELLIDOS, c.EMAIL_ADDR CORREO, j.CITY CIUDAD_RESIDENCIA, j.ADDRESS1 DIRECCION_RESIDENCIA, k.PHONE TELEFONO_RESIDENCIA, e.DESCR CARGO, f.DESCR EMPRESA, h.CITY CIUDAD_EMPRESA, h.ADDRESS1 DIRECCION_EMPRESA, d.PHONE TELEFONO_EMPRESA";

      String strTablas = " FROM estudiantes es";

      String strJoin = " LEFT JOIN PS_PERS_NID b ON b.EMPLID = a.EMPLID AND UPPER(b.PRIMARY_NID) ='Y' LEFT JOIN PS_EMAIL_ADDRESSES c ON c.EMPLID = a.EMPLID AND UPPER(c.PREF_EMAIL_FLAG) = 'Y' LEFT JOIN PS_SCC_PRIORWORK d ON d.emplid = a.emplid LEFT JOIN PS_US_SOC_TBL e ON e.US_SOC_CD = d.US_SOC_CD AND UPPER(e.EFF_STATUS) = 'A' LEFT JOIN PS_EXT_ORG_TBL f ON f.EXT_ORG_ID = d.EXT_ORG_ID LEFT JOIN PS_ORG_LOCATION h ON h.EXT_ORG_ID = f.EXT_ORG_ID LEFT JOIN PS_ADDRESSES j ON j.EMPLID = a.EMPLID AND UPPER(j.EFF_STATUS) = 'A' AND LOWER(j.ADDRESS_TYPE) = 'home' LEFT JOIN PS_PERSONAL_PHONE k ON k.EMPLID = a.EMPLID AND UPPER(k.PREF_PHONE_FLAG) = 'Y'";

      String strCondicion = " WHERE a.emplid = es.emplid";

      String strCarrera = fConsulta.getValor("CARRERA_EGRESADO_PREGRADO");
      String strAnnoGrado = fConsulta.getValor("ANNO_GRADO_EGRESADO_PREGRADO");

      Vector vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strAnnoGrado.equals(""))) ? 1 : 0)) != 0)
      {
        if (!(strAnnoGrado.equals("")))
          strCondicion = strCondicion + " AND es.emplid = i.emplid";

        strCondicion = strCondicion + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strCondicion = strCondicion + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")\n";
        }

        vLista = Utils.dividirString(strAnnoGrado);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strTablas = strTablas + ", PS_ACAD_DEGR i";

          if (strCondicion.contains("es.prg_codigo"))
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
        strCondicion = strCondicion + " AND es.acad_career = 'UGRD')\n";
      }

      strCarrera = fConsulta.getValor("CARRERA_EGRESADO_POSTGRADO");
      strAnnoGrado = fConsulta.getValor("ANNO_GRADO_EGRESADO_POSTGRADO");

      vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strAnnoGrado.equals(""))) ? 1 : 0)) != 0)
      {
        if (strCondicion.contains("es.acad_career = 'UGRD'"))
          strCondicion = strCondicion + " OR (";
        else
          strCondicion = strCondicion + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strCondicion = strCondicion + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")\n";
        }

        vLista = Utils.dividirString(strAnnoGrado);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if (!(strTablas.contains("PS_ACAD_DEGR")))
          {
            strTablas = strTablas + ", PS_ACAD_DEGR i";
          }

          if ((strCondicion.contains("es.prg_codigo")) && (!(strCarrera.equals(""))))
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
        strCondicion = strCondicion + " AND es.acad_career = 'GRAD')";
      }

      strCondicion = strCondicion + ")";

      strTablas = strTablas + ", PS_PERSONAL_DATA a";

      if ((!(strAnnoGrado.equals(""))) && (!(strCondicion.contains("es.emplid = i.emplid"))))
        strCondicion = strCondicion + " AND es.emplid = i.emplid";

      strSql = strSql + strTablas + strJoin + strCondicion;

      strSql = strSql + " GROUP BY a.EMPLID, b.NATIONAL_ID_TYPE, b.NATIONAL_ID, a.FIRST_NAME, a.LAST_NAME, c.EMAIL_ADDR, j.CITY, j.ADDRESS1, k.PHONE, e.DESCR, f.DESCR, h.CITY, h.ADDRESS1, d.PHONE ORDER BY a.FIRST_NAME, a.LAST_NAME ASC, d.PHONE DESC";

      //System.out.println("consulta: " + strSql);
      vResultado = EjecutaConsulta.Ejecutar(strSql);
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.consultarEgresados(Fila fConsulta) " + e.toString());
    }

    return vResultado;
  }

  public static Vector consultarEstudiantes(Fila fConsulta)
  {
    Vector vResultado = new Vector();
    try
    {
      int i;
      String strTablas = " FROM estudiantes es, PS_PERSONAL_DATA a";

      String strSql = "SELECT a.EMPLID, b.NATIONAL_ID_TYPE TIPO_DOCUMENTO, b.NATIONAL_ID NUMERO_DOCUMENTO, a.FIRST_NAME NOMBRES, a.LAST_NAME APELLIDOS, c.EMAIL_ADDR CORREO, j.CITY CIUDAD_RESIDENCIA, j.ADDRESS1 DIRECCION_RESIDENCIA, k.PHONE TELEFONO_RESIDENCIA, e.DESCR CARGO, f.DESCR EMPRESA, h.CITY CIUDAD_EMPRESA, h.ADDRESS1 DIRECCION_EMPRESA, d.PHONE TELEFONO_EMPRESA" + strTablas + " LEFT JOIN PS_PERS_NID b ON b.EMPLID = a.EMPLID AND UPPER(b.PRIMARY_NID) ='Y'" + " LEFT JOIN PS_EMAIL_ADDRESSES c ON c.EMPLID = a.EMPLID AND UPPER(c.PREF_EMAIL_FLAG) = 'Y'" + " LEFT JOIN PS_SCC_PRIORWORK d ON d.emplid = a.emplid" + " LEFT JOIN PS_US_SOC_TBL e ON e.US_SOC_CD = d.US_SOC_CD" + " AND UPPER(e.EFF_STATUS) = 'A'" + " LEFT JOIN PS_EXT_ORG_TBL f ON f.EXT_ORG_ID = d.EXT_ORG_ID" + " LEFT JOIN PS_ORG_LOCATION h ON h.EXT_ORG_ID = f.EXT_ORG_ID" + " LEFT JOIN PS_ADDRESSES j ON j.EMPLID = a.EMPLID AND UPPER(j.EFF_STATUS) = 'A' AND LOWER(j.ADDRESS_TYPE) = 'home'" + " LEFT JOIN PS_PERSONAL_PHONE k ON k.EMPLID = a.EMPLID AND UPPER(k.PREF_PHONE_FLAG) = 'Y'" + " WHERE a.emplid = es.emplid" + " AND es.eas_codigo = 'AC'";

      String strCarrera = fConsulta.getValor("CARRERA_ESTUDIANTE_PREGRADO");
      String strSemestre = fConsulta.getValor("SEMESTRE_ESTUDIANTE_PREGRADO");

      Vector vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strSemestre.equals(""))) ? 1 : 0)) != 0)
      {
        strSql = strSql + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strSql = strSql + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strSql = strSql + ")\n";
        }

        vLista = Utils.dividirString(strSemestre);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if (strSql.contains("es.prg_codigo"))
            strSql = strSql + " AND";

          strSql = strSql + " (semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(0);

          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(i);
          }

          strSql = strSql + ")";
        }
        strSql = strSql + " AND es.acad_career = 'UGRD')\n";
      }

      strCarrera = Utils.getValor(fConsulta, "CARRERA_ESTUDIANTE_POSTGRADO");
      strSemestre = Utils.getValor(fConsulta, "SEMESTRE_ESTUDIANTE_POSTGRADO");

      vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strSemestre.equals(""))) ? 1 : 0)) != 0)
      {
        if (strSql.contains("es.acad_career = 'UGRD'"))
          strSql = strSql + " OR (";
        else
          strSql = strSql + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strSql = strSql + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strSql = strSql + ")\n";
        }

        vLista = Utils.dividirString(strSemestre);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if ((strSql.contains("es.prg_codigo")) && (!(strCarrera.equals(""))))
            strSql = strSql + " AND";

          strSql = strSql + " (semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(0);

          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(i);
          }

          strSql = strSql + ")";
        }
        strSql = strSql + " AND es.acad_career = 'GRAD')";
      }

      strSql = strSql + ")";

      strSql = strSql + " GROUP BY a.EMPLID, b.NATIONAL_ID_TYPE, b.NATIONAL_ID, a.FIRST_NAME, a.LAST_NAME, c.EMAIL_ADDR, j.CITY, j.ADDRESS1, k.PHONE, e.DESCR, f.DESCR, h.CITY, h.ADDRESS1, d.PHONE ORDER BY a.FIRST_NAME, a.LAST_NAME ASC, d.PHONE DESC";

      //System.out.println("consulta: " + strSql);
      vResultado = EjecutaConsulta.Ejecutar(strSql);
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.consultarEgresados(Fila fConsulta) " + e.toString());
    }

    return vResultado;
  }

  public static Vector buscarPersona(Fila fConsulta)
  {
    Vector datos = new Vector();
    try
    {
      String strTablas = " FROM PS_PERSONAL_DATA a";

      String strSql = " SELECT a.EMPLID, b.NATIONAL_ID_TYPE TIPO_DOCUMENTO, b.NATIONAL_ID NUMERO_DOCUMENTO, TRIM(a.FIRST_NAME) NOMBRES, TRIM(a.LAST_NAME) APELLIDOS, a.SEX GENERO, a.MAR_STATUS ESTADO_CIVIL, a.BIRTHDATE FECHA_NACIMIENTO, a.BIRTHCOUNTRY PAIS_NACIMIENTO, a.BIRTHPLACE CIUDAD_NACIMIENTO, j.CITY CIUDAD_RESIDENCIA, j.ADDRESS1 DIRECCION_RESIDENCIA, k.PHONE TELEFONO_RESIDENCIA, c.EMAIL_ADDR CORREO, e.DESCR CARGO, f.DESCR EMPRESA, h.CITY CIUDAD_EMPRESA, h.ADDRESS1 DIRECCION_EMPRESA, d.PHONE TELEFONO_EMPRESA" + strTablas + " LEFT JOIN PS_PERS_NID b ON b.EMPLID = a.EMPLID AND UPPER(b.PRIMARY_NID) ='Y'" + " LEFT JOIN PS_EMAIL_ADDRESSES c ON c.EMPLID = a.EMPLID AND UPPER(c.PREF_EMAIL_FLAG) = 'Y'" + " LEFT JOIN PS_SCC_PRIORWORK d ON d.EMPLID = a.EMPLID" + " LEFT JOIN PS_US_SOC_TBL e ON e.US_SOC_CD = d.US_SOC_CD" + " AND UPPER(e.EFF_STATUS) = 'A'" + " LEFT JOIN PS_EXT_ORG_TBL f ON f.EXT_ORG_ID = d.EXT_ORG_ID" + " LEFT JOIN PS_ORG_LOCATION h ON h.EXT_ORG_ID = f.EXT_ORG_ID" + " LEFT JOIN PS_ADDRESSES j ON j.EMPLID = a.EMPLID AND UPPER(j.EFF_STATUS) = 'A' AND LOWER(j.ADDRESS_TYPE) = 'home'" + " LEFT JOIN PS_PERSONAL_PHONE k ON k.EMPLID = a.EMPLID AND UPPER(k.PREF_PHONE_FLAG) = 'Y'";

      String documento = Utils.getValor(fConsulta, "NUMERO_DOCUMENTO");
      String emplid = Utils.getValor(fConsulta, "EMPLID");

      if ((((!(documento.equals(""))) ? 1 : 0) | ((!(emplid.equals(""))) ? 1 : 0)) != 0)
        strSql = strSql + " WHERE";

      if ((documento != null) && (documento.length() > 0)) {
        strSql = strSql + "  b.NATIONAL_ID = '" + documento + "'";
      }

      if ((emplid != null) && (emplid.length() > 0)) {
        strSql = strSql + "  a.EMPLID = '" + emplid + "'";
      }

      strSql = strSql + " ORDER BY a.FIRST_NAME, a.LAST_NAME ASC";

        System.out.println("SQL_PERSON: " + strSql);

      datos = EjecutaConsulta.Ejecutar(strSql);
    } catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.buscarPersona " + e.toString());
    }
    return datos;
  }

  public static Vector buscarDatosDestinatarios(Fila fConsulta)
  {
    Vector datos = new Vector();
    try
    {
      String strTablas = " FROM PS_PERSONAL_DATA a";

      String strSql = " SELECT a.EMPLID, b.NATIONAL_ID_TYPE TIPO_DOCUMENTO, b.NATIONAL_ID NUMERO_DOCUMENTO, TRIM(a.FIRST_NAME) NOMBRES, TRIM(a.LAST_NAME) APELLIDOS, j.CITY CIUDAD_RESIDENCIA, j.ADDRESS1 DIRECCION_RESIDENCIA, k.PHONE TELEFONO_RESIDENCIA, c.EMAIL_ADDR CORREO, e.DESCR CARGO, f.DESCR EMPRESA, h.CITY CIUDAD_EMPRESA, h.ADDRESS1 DIRECCION_EMPRESA, d.PHONE TELEFONO_EMPRESA" + strTablas + " LEFT JOIN PS_PERS_NID b ON b.EMPLID = a.EMPLID AND UPPER(b.PRIMARY_NID) ='Y'" + " LEFT JOIN PS_EMAIL_ADDRESSES c ON c.EMPLID = a.EMPLID AND UPPER(c.PREF_EMAIL_FLAG) = 'Y'" + " LEFT JOIN PS_SCC_PRIORWORK d ON d.EMPLID = a.EMPLID" + " LEFT JOIN PS_US_SOC_TBL e ON e.US_SOC_CD = d.US_SOC_CD" + " AND UPPER(e.EFF_STATUS) = 'A'" + " LEFT JOIN PS_EXT_ORG_TBL f ON f.EXT_ORG_ID = d.EXT_ORG_ID" + " LEFT JOIN PS_ORG_LOCATION h ON h.EXT_ORG_ID = f.EXT_ORG_ID" + " LEFT JOIN PS_ADDRESSES j ON j.EMPLID = a.EMPLID AND UPPER(j.EFF_STATUS) = 'A' AND LOWER(j.ADDRESS_TYPE) = 'home'" + " LEFT JOIN PS_PERSONAL_PHONE k ON k.EMPLID = a.EMPLID AND UPPER(k.PREF_PHONE_FLAG) = 'Y'";

      String documento = Utils.getValor(fConsulta, "NUMERO_DOCUMENTO");

      String emplid = Utils.getValor(fConsulta, "EMPLID");

      if ((((!(documento.equals(""))) ? 1 : 0) | ((!(emplid.equals(""))) ? 1 : 0)) != 0)
        strSql = strSql + " WHERE";

      if ((documento != null) && (documento.length() > 0))
        strSql = strSql + "  b.NATIONAL_ID = '" + documento + "'";

      if ((emplid != null) && (emplid.length() > 0))
        strSql = strSql + "  a.EMPLID = '" + emplid + "'";

      strSql = strSql + " ORDER BY a.FIRST_NAME, a.LAST_NAME ASC";

      datos = EjecutaConsulta.Ejecutar(strSql);
    } catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.buscarDatosDestinatarios(Fila fConsulta) " + e.toString());
    }
    return datos;
  }

  public static String consultarNumeroCelular(String strEmplid)
  {
    String strNumCel = "";
    try
    {
      String strSql = "SELECT phone NUMERO_CELULAR FROM PS_PERSONAL_PHONE WHERE emplid = '" + strEmplid + "' AND phone_type = 'CELL'";

      strNumCel = ((Fila)EjecutaConsulta.Ejecutar(strSql).get(0)).getValor("NUMERO_CELULAR");
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.consultarNumeroCelular(String strEmplid)" + e.toString());
    }

    return strNumCel;
  }

  public static String consultarProfesionPersona(String strEmplid)
  {
    String strProfesion = "";
    try
    {
      String strSql = "SELECT descr NOMBRE FROM PS_US_SIC_TBL WHERE emplid = '" + strEmplid + "'";

      strProfesion = ((Fila)EjecutaConsulta.Ejecutar(strSql).get(0)).getValor("NOMBRE");
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.consultarProfesionPersona(String strEmplid)" + e.toString());
    }

    return strProfesion;
  }

  public static String consultarNombreCiudad(String strConsecutivo)
  {
    String strNombreCiudad = "";
    try
    {
      String strTablas = " FROM PS_PUJ_CIUDADES";

      String strSql = " SELECT NOMBRE" + strTablas + " WHERE CODIGO = '" + strConsecutivo + "'";

      strNombreCiudad = ((Fila)EjecutaConsulta.Ejecutar(strSql).get(0)).getValor("NOMBRE");
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.consultarNombreCiudad(String strConsecutivo) " + e.toString());
    }

    return strNombreCiudad;
  }

  public static int contarDatosBasicos(Fila fConsulta)
  {
    int iResultado = 0;

    Vector vResultado = new Vector();
    try
    {
      String strSql = "SELECT COUNT(DISTINCT a.EMPLID) CANTIDAD";

      String strTablas = " FROM";

      String strCondicion = "";

      String strValor = Utils.getValor(fConsulta, "ESTADO_CIVIL_PEOPLE");
      Vector vLista = new Vector();
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strCondicion = strCondicion + " WHERE (a.MAR_STATUS = '" + vLista.get(0) + "'";
          for (int i = 1; i < vLista.size(); ++i)
          {
            strCondicion = strCondicion + " OR a.MAR_STATUS = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
      }

      strValor = Utils.getValor(fConsulta, "GENERO_PEOPLE");
      vLista = new Vector();
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if (!(strCondicion.contains("WHERE")))
            strCondicion = strCondicion + " WHERE";
          else
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (a.SEX = '" + vLista.get(0) + "'";
          for (int i = 1; i < vLista.size(); ++i)
          {
            strCondicion = strCondicion + " OR a.SEX = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
      }

      strValor = Utils.getValor(fConsulta, "EDAD");
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          Calendar calendario = Calendar.getInstance();

          int iDiaM = calendario.get(5);

          int iMes = calendario.get(2);

          int iAnno = calendario.get(1);

          int iAnnoInicial = iAnno - Integer.parseInt(vLista.get(0).toString());
          String strFechaInicial = iDiaM + "/" + (iMes + 1) + "/" + iAnnoInicial;

          int iAnnoFinal = iAnnoInicial - 5;
          String strFechaFinal = iDiaM + "/" + (iMes + 1) + "/" + iAnnoFinal;

          if (!(strCondicion.contains("WHERE")))
            strCondicion = strCondicion + " WHERE";
          else
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (a.BIRTHDATE BETWEEN '" + strFechaFinal + "'" + " AND '" + strFechaInicial + "'";

          for (int i = 1; i < vLista.size(); ++i)
          {
            iAnnoInicial = iAnno - Integer.parseInt(vLista.get(i).toString());
            strFechaInicial = iDiaM + "/" + (iMes + 1) + "/" + iAnnoInicial;

            iAnnoFinal = iAnnoInicial - 5;
            strFechaFinal = iDiaM + "/" + (iMes + 1) + "/" + iAnnoFinal;

            strCondicion = strCondicion + " OR a.BIRTHDATE BETWEEN '" + strFechaFinal + "'" + " AND '" + strFechaInicial + "'";
          }

          strCondicion = strCondicion + ")\n";
        }
      }

      strValor = Utils.getValor(fConsulta, "CIUDAD_RESIDENCIA_PEOPLE");
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strTablas = strTablas + " PS_ADDRESSES j,";

          if (!(strCondicion.contains("WHERE")))
            strCondicion = strCondicion + " WHERE";
          else
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (LOWER(TRANSLATE(j.CITY, 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU')) LIKE LOWER(TRANSLATE('%" + vLista.get(0) + "%', 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU'))";
          for (int i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR LOWER(TRANSLATE(j.CITY, 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU')) LIKE LOWER(TRANSLATE('%" + vLista.get(i) + "%', 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU'))";
          }
          strCondicion = strCondicion + ")\n AND j.EMPLID = a.EMPLID AND UPPER(j.EFF_STATUS) = 'A' AND LOWER(j.ADDRESS_TYPE) = 'home'";
        }

      }

      strValor = Utils.getValor(fConsulta, "CARGO_PEOPLE");
      if (!(strValor.equals("")))
      {
        vLista = Utils.dividirString(strValor);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strTablas = strTablas + " PS_SCC_PRIORWORK d,";
          if (!(strCondicion.contains("WHERE")))
            strCondicion = strCondicion + " WHERE";
          else
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (d.US_SOC_CD = '" + vLista.get(0) + "'";
          for (int i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR d.US_SOC_CD = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ") AND d.EMPLID = a.EMPLID";
        }

      }

      strTablas = strTablas + " PS_PERSONAL_DATA a";

      strSql = strSql + strTablas + strCondicion;

      vResultado = EjecutaConsulta.Ejecutar(strSql);

      iResultado = Integer.parseInt(((Fila)vResultado.get(0)).getValor("CANTIDAD"));
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.contarDatosBasicos(Fila fConsulta) " + e.toString());
    }

    return iResultado;
  }

  public static int contarEstudiantes(Fila fConsulta)
  {
    int iResultado = 0;

    Vector vResultado = new Vector();
    try
    {
      int i;
      String strTablas = " FROM estudiantes es, PS_PERSONAL_DATA a";

      String strSql = "SELECT COUNT(DISTINCT a.EMPLID) CANTIDAD" + strTablas + " WHERE a.emplid = es.emplid" + " AND es.eas_codigo = 'AC'";

      String strCarrera = fConsulta.getValor("CARRERA_ESTUDIANTE_PREGRADO");
      String strSemestre = fConsulta.getValor("SEMESTRE_ESTUDIANTE_PREGRADO");

      Vector vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strSemestre.equals(""))) ? 1 : 0)) != 0)
      {
        strSql = strSql + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strSql = strSql + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strSql = strSql + ")\n";
        }

        vLista = Utils.dividirString(strSemestre);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if (strSql.contains("es.prg_codigo"))
            strSql = strSql + " AND";

          strSql = strSql + " (semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(0);

          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(i);
          }

          strSql = strSql + ")";
        }
        strSql = strSql + " AND es.acad_career = 'UGRD')\n";
      }

      strCarrera = Utils.getValor(fConsulta, "CARRERA_ESTUDIANTE_POSTGRADO");
      strSemestre = Utils.getValor(fConsulta, "SEMESTRE_ESTUDIANTE_POSTGRADO");

      vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strSemestre.equals(""))) ? 1 : 0)) != 0)
      {
        if (strSql.contains("es.acad_career = 'UGRD'"))
          strSql = strSql + " OR (";
        else
          strSql = strSql + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strSql = strSql + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strSql = strSql + ")\n";
        }

        vLista = Utils.dividirString(strSemestre);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if ((strSql.contains("es.prg_codigo")) && (!(strCarrera.equals(""))))
            strSql = strSql + " AND";

          strSql = strSql + " (semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(0);

          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strSql = strSql + "\n";

            strSql = strSql + " OR semestre_actual(es.emplid, es.acad_career, 'PUJCL', es.stdnt_car_nbr, es.prg_codigo,' ') = " + vLista.get(i);
          }

          strSql = strSql + ")";
        }
        strSql = strSql + " AND es.acad_career = 'GRAD')";
      }

      strSql = strSql + ")";

      vResultado = EjecutaConsulta.Ejecutar(strSql);

      iResultado = Integer.parseInt(((Fila)vResultado.get(0)).getValor("CANTIDAD"));
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.contarEstudiantes(Fila fConsulta) " + e.toString());
    }
    return iResultado;
  }

  public static int contarEgresados(Fila fConsulta)
  {
    int iResultado = 0;

    Vector vResultado = new Vector();
    try
    {
      int i;
      String strSql = "SELECT COUNT(DISTINCT a.EMPLID) CANTIDAD";

      String strTablas = " FROM estudiantes es";

      String strCondicion = " WHERE a.emplid = es.emplid";

      String strCarrera = fConsulta.getValor("CARRERA_EGRESADO_PREGRADO");
      String strAnnoGrado = fConsulta.getValor("ANNO_GRADO_EGRESADO_PREGRADO");

      Vector vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strAnnoGrado.equals(""))) ? 1 : 0)) != 0)
      {
        if (!(strAnnoGrado.equals("")))
          strCondicion = strCondicion + " AND es.emplid = i.emplid";

        strCondicion = strCondicion + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strCondicion = strCondicion + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")\n";
        }

        vLista = Utils.dividirString(strAnnoGrado);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strTablas = strTablas + ", PS_ACAD_DEGR i";

          if (strCondicion.contains("es.prg_codigo"))
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
        strCondicion = strCondicion + " AND es.acad_career = 'UGRD')\n";
      }

      strCarrera = fConsulta.getValor("CARRERA_EGRESADO_POSTGRADO");
      strAnnoGrado = fConsulta.getValor("ANNO_GRADO_EGRESADO_POSTGRADO");

      vLista = new Vector();
      if ((((!(strCarrera.equals(""))) ? 1 : 0) | ((!(strAnnoGrado.equals(""))) ? 1 : 0)) != 0)
      {
        if (strCondicion.contains("es.acad_career = 'UGRD'"))
          strCondicion = strCondicion + " OR (";
        else
          strCondicion = strCondicion + " AND ((";

        vLista = Utils.dividirString(strCarrera);
        if ((vLista != null) && (vLista.size() > 0))
        {
          strCondicion = strCondicion + " (es.prg_codigo = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR es.prg_codigo = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")\n";
        }

        vLista = Utils.dividirString(strAnnoGrado);
        if ((vLista != null) && (vLista.size() > 0))
        {
          if (!(strTablas.contains("PS_ACAD_DEGR")))
          {
            strTablas = strTablas + ", PS_ACAD_DEGR i";
          }

          if ((strCondicion.contains("es.prg_codigo")) && (!(strCarrera.equals(""))))
            strCondicion = strCondicion + " AND";

          strCondicion = strCondicion + " (TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(0) + "'";
          for (i = 1; i < vLista.size(); ++i)
          {
            if (i % 100 == 0)
              strCondicion = strCondicion + "\n";

            strCondicion = strCondicion + " OR TO_CHAR(i.degr_status_date, 'YYYY') = '" + vLista.get(i) + "'";
          }
          strCondicion = strCondicion + ")";
        }
        strCondicion = strCondicion + " AND es.acad_career = 'GRAD')";
      }

      strCondicion = strCondicion + ")";

      strTablas = strTablas + ", PS_PERSONAL_DATA a";

      if ((!(strAnnoGrado.equals(""))) && (!(strCondicion.contains("es.emplid = i.emplid"))))
        strCondicion = strCondicion + " AND es.emplid = i.emplid";

      strSql = strSql + strTablas + strCondicion;

      vResultado = EjecutaConsulta.Ejecutar(strSql);

      iResultado = Integer.parseInt(((Fila)vResultado.get(0)).getValor("CANTIDAD"));
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: en la consulta de Persona.contarEgresados(Fila fConsulta) " + e.toString());
    }

    return iResultado;
  }

    public static boolean existeCorreo(String strEmplid, String strTipoCorreo) throws Exception {
        boolean bExiste = false;

        String strQuery = "SELECT ma.EMAIL_ADDR " +
                "FROM PS_EMAIL_ADDRESSES ma " +
                "WHERE ma.EMPLID = '"+strEmplid+"' " +
                "AND ma.E_ADDR_TYPE = '"+strTipoCorreo+"' " +
                //"AND TRIM(LOWER(ma.EMAIL_ADDR)) = TRIM(LOWER('"+strCorreo+"'))";
                "";

        Vector vDatos = EjecutaConsulta.Ejecutar(strQuery);

        if (vDatos.size() > 0) {
            bExiste = true;
        }

        return bExiste;
    }

    public static boolean existeCorreoPreferido(String strEmplid, String strTipoCorreo) {
        boolean bExiste = false;

        String strQuery = "SELECT ea.EMPLID FROM PS_EMAIL_ADDRESSES ea WHERE ea.EMPLID = '"+strEmplid+"' AND LOWER(ea.PREF_EMAIL_FLAG) = LOWER('Y')";

        if (strTipoCorreo != null && strTipoCorreo.length() > 0) {
            strQuery = strQuery + " AND LOWER(ea.E_ADDR_TYPE) != LOWER('"+strTipoCorreo+"')";
        }

        System.out.println("EXISTE_CORREO_PREF: " + strQuery);

        try {
            Vector vDatos = EjecutaConsulta.Ejecutar(strQuery);

            if (vDatos.size() > 0) {
                bExiste = true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return bExiste;
    }

    public static boolean existeTelefono(String strEmplid, String strTipoTelefono) throws Exception {
        boolean bExiste = false;

        String strQuery = "SELECT ph.PHONE " +
                "FROM PS_PERSONAL_PHONE ph " +
                "WHERE ph.EMPLID = '"+strEmplid+"' " +
                "AND ph.PHONE_TYPE = '"+strTipoTelefono+"' " +
                //"AND LOWER(REPLACE(REPLACE(ph.PHONE, '/', ''), '-', '')) = LOWER(REPLACE(REPLACE('"+strNumeroTelefono+"', '/', ''), '-', ''))";
                "";

        Vector vDatos = EjecutaConsulta.Ejecutar(strQuery);

        if (vDatos.size() > 0) {
            bExiste = true;
        }

        return bExiste;
    }

    public static boolean existeTelefonoPreferido(String strEmplid, String strTipoTelefono) {
        boolean bExiste = false;

        String strQuery = "SELECT pp.* FROM PS_PERSONAL_PHONE pp WHERE pp.EMPLID = '"+strEmplid+"' AND LOWER(pp.PREF_PHONE_FLAG) = LOWER('Y')";

        if (strTipoTelefono != null && strTipoTelefono.length() > 0) {
            strQuery = strQuery + " AND LOWER(pp.PHONE_TYPE) != LOWER('"+strTipoTelefono+"')";
        }

        System.out.println("EXISTE_TELEFONO_PREF: " + strQuery);

        try {
            Vector vDatos = EjecutaConsulta.Ejecutar(strQuery);

            if (vDatos.size() > 0) {
                bExiste = true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return bExiste;
    }

  public static int getNuevoEmplId() throws Exception {
      int iNuevoEmpId = -1;

        String strQuery = "SELECT EMPLID_LAST_CS FROM PS_INSTALLATION_SA";
        Vector vDatos = EjecutaConsulta.Ejecutar(strQuery);

        if (vDatos.size() > 0) {
          Fila filaDato = (Fila) vDatos.firstElement();
            try {
                iNuevoEmpId = Integer.parseInt(filaDato.getValor("EMPLID_LAST_CS"));
                iNuevoEmpId = iNuevoEmpId + 1;
            } catch (Exception e) {}
        }

        if (iNuevoEmpId > 0) {
            //Obtuvo el nuevo EMPLID
            strQuery = "UPDATE PS_INSTALLATION_SA SET EMPLID_LAST_CS = " + iNuevoEmpId;
            boolean bResult = EjecutaConsulta.Insertar(strQuery);

            if (!bResult) {
                iNuevoEmpId = -1;
            }
        }

        return iNuevoEmpId;
  }

    public static boolean insertarExperienciaProfesional(Fila filaDatos) throws Exception {
        String strInsert = Utils.getInsertString("PS_SCC_PRIORWORK", filaDatos);
        System.out.println("INSERT PS_SCC_PRIORWORK: \n" + strInsert);

        boolean bResult = EjecutaConsulta.Insertar(strInsert);

        return bResult;
    }

  public static boolean insertarPersona(String strUsuario, Fila filaDatosPersona) throws Exception {

      String strInsert = Utils.getInsertString("PS_PERSONAL_DATA", filaDatosPersona);
      System.out.println("INSERT PS_PERSONAL_DATA: \n" + strInsert);

      boolean bResult = EjecutaConsulta.Insertar(strInsert);

      if (bResult) {
            //Debe insertar en PS_NAMES...
            Fila filaTMP = new Fila();
            filaTMP.adicionar("EMPLID", filaDatosPersona.getValor("EMPLID"));
            filaTMP.adicionar("NAME_TYPE", "PRI");
            filaTMP.adicionar("EFFDT", "to_date(to_char(SYSDATE, 'dd/mm/yyyy'), 'dd/mm/yyyy')");
            filaTMP.adicionar("EFF_STATUS", "A");
            filaTMP.adicionar("COUNTRY_NM_FORMAT", filaDatosPersona.getValor("COUNTRY_NM_FORMAT"));
            filaTMP.adicionar("NAME", filaDatosPersona.getValor("NAME"));
            filaTMP.adicionar("NAME_INITIALS", filaDatosPersona.getValor("NAME_INITIALS"));
            filaTMP.adicionar("NAME_PREFIX", filaDatosPersona.getValor("NAME_PREFIX"));
            filaTMP.adicionar("NAME_SUFFIX", filaDatosPersona.getValor("NAME_SUFFIX"));
            filaTMP.adicionar("NAME_ROYAL_PREFIX", filaDatosPersona.getValor("NAME_ROYAL_PREFIX"));
            filaTMP.adicionar("NAME_ROYAL_SUFFIX", filaDatosPersona.getValor("NAME_ROYAL_SUFFIX"));
            filaTMP.adicionar("NAME_TITLE", filaDatosPersona.getValor("NAME_TITLE"));
            filaTMP.adicionar("LAST_NAME_SRCH", filaDatosPersona.getValor("LAST_NAME_SRCH"));
            filaTMP.adicionar("FIRST_NAME_SRCH", filaDatosPersona.getValor("FIRST_NAME_SRCH"));
            filaTMP.adicionar("LAST_NAME", filaDatosPersona.getValor("LAST_NAME"));
            filaTMP.adicionar("FIRST_NAME", filaDatosPersona.getValor("FIRST_NAME"));
            filaTMP.adicionar("MIDDLE_NAME", filaDatosPersona.getValor("MIDDLE_NAME"));
            filaTMP.adicionar("SECOND_LAST_NAME", filaDatosPersona.getValor("SECOND_LAST_NAME"));
            filaTMP.adicionar("SECOND_LAST_SRCH", filaDatosPersona.getValor("SECOND_LAST_SRCH"));
            filaTMP.adicionar("NAME_AC", filaDatosPersona.getValor("NAME_AC"));
            filaTMP.adicionar("PREF_FIRST_NAME", filaDatosPersona.getValor("PREF_FIRST_NAME"));
            filaTMP.adicionar("PARTNER_LAST_NAME", filaDatosPersona.getValor("PARTNER_LAST_NAME"));
            filaTMP.adicionar("PARTNER_ROY_PREFIX", filaDatosPersona.getValor("PARTNER_ROY_PREFIX"));
            filaTMP.adicionar("LAST_NAME_PREF_NLD", filaDatosPersona.getValor("LAST_NAME_PREF_NLD"));
            filaTMP.adicionar("NAME_DISPLAY", filaDatosPersona.getValor("NAME_DISPLAY"));
            filaTMP.adicionar("NAME_FORMAL", filaDatosPersona.getValor("NAME_FORMAL"));
            filaTMP.adicionar("LASTUPDDTTM", "SYSDATE");
            filaTMP.adicionar("LASTUPDOPRID", strUsuario.toUpperCase());
            filaTMP.adicionar("NAME_DISPLAY_SRCH", filaDatosPersona.getValor("FIRST_NAME_SRCH") + filaDatosPersona.getValor("LAST_NAME_SRCH"));

            strInsert = Utils.getInsertString("PS_NAMES", filaTMP);
            System.out.println("INSERT PS_NAMES: \n" + strInsert);

            bResult = EjecutaConsulta.Insertar(strInsert);

            if (bResult) {
                //Debe insertar en PS_PERS_DATA_EFFDT...
                filaTMP = new Fila();
                filaTMP.adicionar("EMPLID", filaDatosPersona.getValor("EMPLID"));
                filaTMP.adicionar("EFFDT", "to_date(to_char(SYSDATE, 'dd/mm/yyyy'), 'dd/mm/yyyy')");
                filaTMP.adicionar("MAR_STATUS", filaDatosPersona.getValor("MAR_STATUS"));
                filaTMP.adicionar("MAR_STATUS_DT", "to_date(to_char(SYSDATE, 'dd/mm/yyyy'), 'dd/mm/yyyy')");
                filaTMP.adicionar("SEX", filaDatosPersona.getValor("SEX"));
                filaTMP.adicionar("HIGHEST_EDUC_LVL", filaDatosPersona.getValor("HIGHEST_EDUC_LVL"));
                filaTMP.adicionar("FT_STUDENT", filaDatosPersona.getValor("FT_STUDENT"));
                filaTMP.adicionar("LANG_CD", " ");
                filaTMP.adicionar("ALTER_EMPLID", " ");
                filaTMP.adicionar("LASTUPDDTTM", "SYSDATE");
                filaTMP.adicionar("LASTUPDOPRID", strUsuario.toUpperCase());

                strInsert = Utils.getInsertString("PS_PERS_DATA_EFFDT", filaTMP);
                System.out.println("INSERT PS_PERS_DATA_EFFDT: \n" + strInsert);

                bResult = EjecutaConsulta.Insertar(strInsert);
            }

            if (bResult) {
                filaTMP = new Fila();
                filaTMP.adicionar("EMPLID", filaDatosPersona.getValor("EMPLID"));
                filaTMP.adicionar("BIRTHDATE", filaDatosPersona.getValor("BIRTHDATE"));
                filaTMP.adicionar("BIRTHPLACE", filaDatosPersona.getValor("BIRTHPLACE"));
                filaTMP.adicionar("BIRTHCOUNTRY", filaDatosPersona.getValor("BIRTHCOUNTRY"));
                filaTMP.adicionar("BIRTHSTATE", filaDatosPersona.getValor("BIRTHSTATE"));
                filaTMP.adicionar("LAST_CHILD_UPDDTM", "SYSDATE");

                strInsert = Utils.getInsertString("PS_PERSON", filaTMP);
                System.out.println("INSERT PS_PERSON: \n" + strInsert);

                bResult = EjecutaConsulta.Insertar(strInsert);
            }

            if (bResult) {
                filaTMP = new Fila();
                filaTMP.adicionar("EMPLID", filaDatosPersona.getValor("EMPLID"));
                filaTMP.adicionar("VA_BENEFIT", filaDatosPersona.getValor("VA_BENEFIT"));
                filaTMP.adicionar("CAMPUS_ID", filaDatosPersona.getValor("CAMPUS_ID"));
                filaTMP.adicionar("DEATH_CERTIF_NBR", filaDatosPersona.getValor("DEATH_CERTIF_NBR"));
                filaTMP.adicionar("FERPA", filaDatosPersona.getValor("FERPA"));
                filaTMP.adicionar("PLACE_OF_DEATH", filaDatosPersona.getValor("PLACE_OF_DEATH"));

                System.out.println("PS_PERSON_SA: " + filaTMP);

                strInsert = Utils.getInsertString("PS_PERSON_SA", filaTMP);
                System.out.println("INSERT PS_PERSON_SA: \n" + strInsert);

                bResult = EjecutaConsulta.Insertar(strInsert);
            }
      }

      return bResult;
  }//

    public static boolean insertarDocumentoIdentidad(Fila filaDatos) throws Exception {
        String strInsert = Utils.getInsertString("PS_PERS_NID", filaDatos);
        System.out.println("INSERT PS_PERS_NID: \n" + strInsert);

        boolean bResult = EjecutaConsulta.Insertar(strInsert);

        return bResult;
    }

    public static boolean insertarCorreo(Fila filaDatos) throws Exception {
        String strInsert = Utils.getInsertString("PS_EMAIL_ADDRESSES", filaDatos);
        System.out.println("INSERT PS_EMAIL_ADDRESSES: \n" + strInsert);

        boolean bResult = EjecutaConsulta.Insertar(strInsert);

        return bResult;
    }

    public static boolean insertarTelefono(Fila filaDatos) throws Exception {
        String strInsert = Utils.getInsertString("PS_PERSONAL_PHONE", filaDatos);
        System.out.println("INSERT PS_PERSONAL_PHONE: \n" + strInsert);

        boolean bResult = EjecutaConsulta.Insertar(strInsert);

        return bResult;
    }

    public static boolean insertarDireccion(Fila filaDatos) throws Exception {
        String strInsert = Utils.getInsertString("PS_ADDRESSES", filaDatos);
        System.out.println("INSERT PS_ADDRESSES: \n" + strInsert);

        boolean bResult = EjecutaConsulta.Insertar(strInsert);

        return bResult;
    }

    public static boolean modificarCorreo(Fila filaDatos) {
        boolean bResult = false;
        try {
            String strInsert = "UPDATE " +
                    "PS_EMAIL_ADDRESSES " +
                    "SET EMAIL_ADDR = '" + filaDatos.getValor("EMAIL_ADDR").trim() + "' " +
                    "WHERE EMPLID = '" + filaDatos.getValor("EMPLID").trim() + "' " +
                    "AND E_ADDR_TYPE = '" + filaDatos.getValor("E_ADDR_TYPE").trim() + "'";
            System.out.println("UPDATE PS_EMAIL_ADDRESSES: \n" + strInsert);

            bResult = EjecutaConsulta.Insertar(strInsert);
        } catch (Exception exception) {
            exception.printStackTrace();
        }

        return bResult;
    }

    public static boolean modificarTelefono(Fila filaDatos) {
        boolean bResult = false;
        try {
            String strInsert = "UPDATE " +
                    "PS_PERSONAL_PHONE " +
                    "SET PHONE = '" + filaDatos.getValor("PHONE").trim() + "' " +
                    "WHERE EMPLID = '" + filaDatos.getValor("EMPLID").trim() + "' " +
                    "AND PHONE_TYPE = '" + filaDatos.getValor("PHONE_TYPE").trim() + "'";
            System.out.println("UPDATE PS_PERSONAL_PHONE: \n" + strInsert);

            bResult = EjecutaConsulta.Insertar(strInsert);
        } catch (Exception exception) {
            exception.printStackTrace();
        }

        return bResult;
    }

    public static boolean modificarPersona(String strUsuario, Fila filaDatosPersona){
        boolean bResult = false;
        Fila filaTMP;
        try {
            // Si != null .length > 0   UPDATE
            //En PS_PERSONA_DATA actualiza...
            String strUpdate = "UPDATE PS_PERSONAL_DATA ";

            if (filaDatosPersona.getValor("ADDRESS1") != null && filaDatosPersona.getValor("ADDRESS1").trim().length() > 0) {
                if (!strUpdate.contains("SET")) {
                    strUpdate += "SET ADDRESS1 = '"+filaDatosPersona.getValor("ADDRESS1")+"'";
                } else {
                    strUpdate += ", ADDRESS1 = '"+filaDatosPersona.getValor("ADDRESS1")+"'";
                }
            }

            if (filaDatosPersona.getValor("CITY") != null && filaDatosPersona.getValor("CITY").length() > 0) {
                if (!strUpdate.contains("SET")) {
                    strUpdate += "SET CITY = '"+filaDatosPersona.getValor("CITY")+"'";
                } else {
                    strUpdate += ", CITY = '"+filaDatosPersona.getValor("CITY")+"'";
                }
            }

            if (filaDatosPersona.getValor("STATE") != null && filaDatosPersona.getValor("STATE").trim().length() > 0) {
                if (!strUpdate.contains("SET")) {
                    strUpdate += "SET STATE = '"+filaDatosPersona.getValor("STATE")+"'";
                } else {
                    strUpdate += ", STATE = '"+filaDatosPersona.getValor("STATE")+"'";
                }
            }

            if (filaDatosPersona.getValor("SEX") != null && filaDatosPersona.getValor("SEX").trim().length() > 0) {
                if (!strUpdate.contains("SET")) {
                    strUpdate += "SET SEX = '"+filaDatosPersona.getValor("SEX")+"'";
                } else {
                    strUpdate += ", SEX = '"+filaDatosPersona.getValor("SEX")+"'";
                }
            }

            if (filaDatosPersona.getValor("MAR_STATUS") != null && filaDatosPersona.getValor("MAR_STATUS").trim().length() > 0) {
                if (!strUpdate.contains("SET")) {
                    strUpdate += "SET MAR_STATUS = '"+filaDatosPersona.getValor("MAR_STATUS")+"'";
                } else {
                    strUpdate += ", MAR_STATUS = '"+filaDatosPersona.getValor("MAR_STATUS")+"'";
                }
            }

            if (filaDatosPersona.getValor("BIRTHDATE") != null && filaDatosPersona.getValor("BIRTHDATE").trim().length() > 0) {
                String car = "'";
                if ((filaDatosPersona.getValor("BIRTHDATE").trim().toLowerCase().startsWith("to_date(")
                      || filaDatosPersona.getValor("BIRTHDATE").trim().toLowerCase().equalsIgnoreCase("sysdate"))) {
                    car = "";
                }

                if (!strUpdate.contains("SET")) {
                    strUpdate += "SET BIRTHDATE = "+car+filaDatosPersona.getValor("BIRTHDATE")+car;
                } else {
                    strUpdate += ", BIRTHDATE = "+car+filaDatosPersona.getValor("BIRTHDATE")+car;
                }
            }

            if (filaDatosPersona.getValor("BIRTHPLACE") != null && filaDatosPersona.getValor("BIRTHPLACE").trim().length() > 0) {
                if (!strUpdate.contains("SET")) {
                    strUpdate += "SET BIRTHPLACE = '"+filaDatosPersona.getValor("BIRTHPLACE")+"'";
                } else {
                    strUpdate += ", BIRTHPLACE = '"+filaDatosPersona.getValor("BIRTHPLACE")+"'";
                }
            }

            if (filaDatosPersona.getValor("BIRTHSTATE") != null && filaDatosPersona.getValor("BIRTHSTATE").trim().length() > 0) {
                if (!strUpdate.contains("SET")) {
                    strUpdate += "SET BIRTHSTATE = '"+filaDatosPersona.getValor("BIRTHSTATE")+"'";
                } else {
                    strUpdate += ", BIRTHSTATE = '"+filaDatosPersona.getValor("BIRTHSTATE")+"'";
                }
            }

            if (filaDatosPersona.getValor("PHONE") != null && filaDatosPersona.getValor("PHONE").trim().length() > 0) {
                if (!strUpdate.contains("SET")) {
                    strUpdate += "SET PHONE = '"+filaDatosPersona.getValor("PHONE")+"'";
                } else {
                    strUpdate += ", PHONE = '"+filaDatosPersona.getValor("PHONE")+"'";
                }
            }

            if (strUpdate.contains("SET")) {
                if (filaDatosPersona.getValor("MAR_STATUS") != null && filaDatosPersona.getValor("MAR_STATUS").trim().length() > 0) {
                    strUpdate += ", MAR_STATUS_DT = to_date(to_char(SYSDATE, 'dd/mm/yyyy'), 'dd/mm/yyyy')";
                }

                //strUpdate += ", MAR_STATUS_DT = SYSDATE";
                strUpdate += ", LASTUPDDTTM = SYSDATE";

                strUpdate += " WHERE EMPLID = '"+filaDatosPersona.getValor("EMPLID")+"'";

                System.out.println("--------------");
                System.out.println("UPDT PS_PERSONAL_DATA: \n" + strUpdate);

                bResult = EjecutaConsulta.Insertar(strUpdate);
            }

            //Si MAR_STATUS || SEX  != null .length > 0   INSERT
            //PS_PERS_DATA_EFFDT
            if ((filaDatosPersona.getValor("MAR_STATUS") != null && filaDatosPersona.getValor("MAR_STATUS").trim().length() > 0)
                    && (filaDatosPersona.getValor("SEX") != null && filaDatosPersona.getValor("SEX").trim().length() > 0)) {

                filaTMP = new Fila();
                filaTMP.adicionar("EMPLID", filaDatosPersona.getValor("EMPLID"));
                filaTMP.adicionar("EFFDT", "to_date(to_char(SYSDATE, 'dd/mm/yyyy'), 'dd/mm/yyyy')");
                //filaTMP.adicionar("EFFDT", "SYSDATE");
                filaTMP.adicionar("MAR_STATUS", filaDatosPersona.getValor("MAR_STATUS"));
                filaTMP.adicionar("MAR_STATUS_DT", "to_date(to_char(SYSDATE, 'dd/mm/yyyy'), 'dd/mm/yyyy')");
                //filaTMP.adicionar("MAR_STATUS_DT", "SYSDATE");
                filaTMP.adicionar("SEX", filaDatosPersona.getValor("SEX"));
                filaTMP.adicionar("HIGHEST_EDUC_LVL", filaDatosPersona.getValor("HIGHEST_EDUC_LVL"));
                filaTMP.adicionar("FT_STUDENT", filaDatosPersona.getValor("FT_STUDENT"));
                filaTMP.adicionar("LANG_CD", " ");
                filaTMP.adicionar("ALTER_EMPLID", " ");
                filaTMP.adicionar("LASTUPDDTTM", "SYSDATE");
                filaTMP.adicionar("LASTUPDOPRID", strUsuario.toUpperCase());

                String strInsert = Utils.getInsertString("PS_PERS_DATA_EFFDT", filaTMP);
                System.out.println("--------------");
                System.out.println("INSERT (MODIF) PS_PERS_DATA_EFFDT: \n" + strInsert);

                bResult = EjecutaConsulta.Insertar(strInsert);
            }


            //Si BIRTHDATE || BIRTHPLACE ||  BIRTHSTATE  != null .length > 0   UPDATE
            //PS_PERSON
            strUpdate = "UPDATE PS_PERSON ";

            if (filaDatosPersona.getValor("BIRTHDATE") != null && filaDatosPersona.getValor("BIRTHDATE").trim().length() > 0) {
                String car = "'";
                if ((filaDatosPersona.getValor("BIRTHDATE").trim().toLowerCase().startsWith("to_date(")
                      || filaDatosPersona.getValor("BIRTHDATE").trim().toLowerCase().equalsIgnoreCase("sysdate"))) {
                    car = "";
                }
                if (!strUpdate.contains("SET")) {
                    strUpdate += "SET BIRTHDATE = "+car+filaDatosPersona.getValor("BIRTHDATE")+car;
                } else {
                    strUpdate += ", BIRTHDATE = "+car+filaDatosPersona.getValor("BIRTHDATE")+car;
                }
            }

            if (filaDatosPersona.getValor("BIRTHPLACE") != null && filaDatosPersona.getValor("BIRTHPLACE").trim().length() > 0) {
                if (!strUpdate.contains("SET")) {
                    strUpdate += "SET BIRTHPLACE = '"+filaDatosPersona.getValor("BIRTHPLACE")+"'";
                } else {
                    strUpdate += ", BIRTHPLACE = '"+filaDatosPersona.getValor("BIRTHPLACE")+"'";
                }
            }

            if (filaDatosPersona.getValor("BIRTHSTATE") != null && filaDatosPersona.getValor("BIRTHSTATE").trim().length() > 0) {
                if (!strUpdate.contains("SET")) {
                    strUpdate += "SET BIRTHSTATE = '"+filaDatosPersona.getValor("BIRTHSTATE")+"'";
                } else {
                    strUpdate += ", BIRTHSTATE = '"+filaDatosPersona.getValor("BIRTHSTATE")+"'";
                }
            }

            if (strUpdate.contains("SET")) {
                strUpdate += ", LAST_CHILD_UPDDTM = SYSDATE";

                strUpdate += " WHERE EMPLID = '"+filaDatosPersona.getValor("EMPLID")+"'";

                System.out.println("--------------");
                System.out.println("UPDT PS_PERSON: \n" + strUpdate);

                bResult = EjecutaConsulta.Insertar(strUpdate);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return bResult;
    }
}